home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / ACORNUSERS / EMULATOR / EMUL6502 / Sources / BubSort next >
Text File  |  1998-08-27  |  2KB  |  69 lines

  1. ;Alain BROBECKER (aka baah/Arm's Tech), 27aug1998
  2. ;Bubble sort routine from the '6502 programming' book by Rodnay ZAKS
  3. ;
  4. ;Copies the program and sort it using bubble sort and post-indexed indirect
  5. ;adressing. Once done, we check the table is correctly sorted and in such
  6. ;case the program ends with the 'brk' inside code. If table is unsorted,
  7. ;program ends by executing the 'brk'=&00 at adress 0.
  8.  
  9.             #name       BubSortX
  10.             #list
  11.             #base       &100-4      ;Start assembly here
  12.             #rw         &100        ;Load adress
  13.             #rw         &100        ;Exec adress
  14.  
  15. ;Zero page adresses used as storage
  16. #set        tabpointer = &20
  17.  
  18. ;At first initialise tabpointer, then copy the program in table
  19. .start
  20.   lda #table AND &ff    ;Initialise tabpointer
  21.   sta z,tabpointer
  22.   lda #table>>8
  23.   sta z,tabpointer+1
  24.   ldx #table-start      ;Program size
  25.   stx table
  26. .copy_one
  27.   lda start-1,x
  28.   sta table,x
  29.  dex:bne copy_one
  30.  
  31. ;Perform bubble sort on table (sorting a program ,wow!)
  32. .BubSort
  33.   ldx #0                ;x=exchanged boolean
  34.   lda (tabpointer,x)
  35.   tay                   ;y=nb of elements
  36. .BubSortLoop
  37.   lda (tabpointer),y    ;read table(y)
  38.   dey
  39.   beq BubSortEnd
  40.   cmp (tabpointer),y    ;compare to table(y-1)
  41.   bcs BubSortLoop
  42. .BubSortExchange
  43.   tax                   ;Exchange elts
  44.   lda (tabpointer),y
  45.   iny
  46.   sta (tabpointer),y
  47.   txa
  48.   dey
  49.   sta (tabpointer),y
  50.   ldx #1                ;exchanged=1
  51.   bne BubSortLoop       ;Get next elt
  52. .BubSortEnd
  53.   txa                   ;Shift exchanged to a register, for compare
  54.   bne BubSort           ;If some exchanges made, do another pass
  55.  
  56. ;Make sure table is sorted.
  57.   ldx table
  58. .CheckSorted
  59.   lda table,x
  60.   dex
  61.   beq SortedOk
  62.   cmp table,x
  63.   bcs CheckSorted
  64.   jmp 0
  65. .SortedOk
  66.   brk
  67.  
  68. .table
  69.